226. 翻转二叉树
226. 翻转二叉树
Similar Question
leading to the advanced question
Solution Tips
方案一: 递归
var invertTree = function(node) {
// 从底部开始翻转, 先反转最底层的节点, 所以肯定是一个后序遍历
if (node === null) return null;
if (node.left === null && node.right === null) return node;
invertTree(node.left);
invertTree(node.right);
// 翻转
[node.left, node.right] = [node.right, node.left];
return node;
// 迭代法也是一样做的, 就是利用数组做元素的交换而已, 利用栈做反转是最常见的思路
// 先序遍历 push, 再次先序遍历 pop 出来就好了
};
方案二: 迭代
var invertTree = function(root) {
if(root==null) return null
const stack = [root]
while(stack.length>0){
const cur = stack.pop()
let left = cur.left,
right = cur.right
cur.left = right
cur.right = left
if(cur.left) stack.push(cur.left)
if(cur.right) stack.push(cur.right)
}
return root
}